# 1.给两个字符串s和t,判断t是否为s的重新排列后组成的单词
# 例如 s = 'abbc' 和 t = 'acbb' return True
# s = 'abbc' 和 t = 'aabc' return False

def 是否重新排列后的字符串(s, t):
    if len(s) != len(t):
        return False
    list1 = list(s)
    list2 = list(t)
    flag = False
    for index, item in enumerate(list2):
        if item in list1:
            p = list1.index(item)
            list1[index], list1[p] = list1[p], list1[index]
    if list1 == list2:
        flag = True
    return flag


print(是否重新排列后的字符串('abcde', 'bcade'))


# 2.给定一个m*n的二维列表,查找一个数是否存在.列表有以下特性
# 每一行的列表从左到右已经排序好了.
# 每一行第一个数比上一行最后一个数大

def binary_search(ls, value):
    left = 0
    right = len(ls) - 1
    while left <= right:
        mid = (left + right) // 2
        if ls[mid] > value:
            right = mid - 1
        elif ls[mid] < value:
            left = mid + 1
        else:
            return mid
    return -1


def search_list(value):
    list1 = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]
    index_1 = 0
    index_2 = -1
    for index, item in enumerate(list1):
        if value in item:
            index_1 = index
            index_2 = binary_search(item, value)
    if index_2 == -1:
        print('没有查找到该数据')
    else:
        print('数据下标是[' + str(index_1) + '][' + str(index_2) + ']')


search_list(50)

# 3.给定一个列表和一个整数,设计算法找到两个数的下标,使得2个数之和为给定的整数.保证肯定仅有一个结果.
# 例如,列表[1,2,5,4]与目标整数3,1+2=3,结果为(0,1).
list3 = [3, 2, 8, 9, 77, 1, 2]


def 返回下标元祖(ls, value):
    str1 = ''
    for y in range(len(ls) - 1):
        for x in range(y + 1, len(ls)):
            temp = ls[y]
            temp = temp + ls[x]
            if temp == value:
                str1 = str(y) + str(x)
                print('==', str1)
                break
        if str1 != '':
            break
    print('下标是', tuple(str1))


返回下标元祖(list3, 79)
# print()
